import axios from 'axios';
// VUE 实例， 使用方式：app.$router.push('/login')
import app from '@/main';
import { Notification } from 'element-ui';
// 前后端接口返回码表 约定文件
// const codeList = require('../json/api/responseCode.json');

// axios全局配置
axios.defaults.headers.common['Content-Type'] =
  'application/json; charset=utf-8';
//`withCredentials` 表示跨域请求时是否需要使用凭证
axios.defaults.withCredentials = true;
// 创建一个axios实例
var service = axios.create({
  baseURL: process.env.VUE_APP_URL, // 域名 + 端口  https://123.123.12.1:0000(例子：在env 等文件中配置)
  headers: {
    'content-type': 'application/json; charset=utf-8',
  },
  timeout: 5000, // 请求超时时间
});

// axios 的拦截器和项目还是有一定的耦合性的，需要根据自己项目的情况来随即应变的配置

// request拦截器
service.interceptors.request.use(
  (config) => {
    let token = '';
    if (token) {
      config.headers['X-Token'] = token; // 让每个请求携带自定义token 请根据实际情况自行修改
    }
    return config;
  },
  (error) => {
    // Do something with request error
    console.log(error); // for debug
    Promise.reject(error);
  }
);

// response 拦截器
service.interceptors.response.use(
  (response) => {
    /**
     * code为非20000是抛错 可结合自己业务进行修改
     */
    const res = response.data;
    const codeReg = /^20\d+/;
    console.log(response);
    if (response.config.responseType == 'blob') {
      return response;
    }
    if (!codeReg.test(response.status)) {
      Notification.error({
        message: res.message,
        duration: 5 * 1000,
      });
      return Promise.reject('error');
    } else {
      let code = response.data.code;
      console.log(code);

      if (code !== '200') {
        if (code == -1 || code.startsWith('5')) {
          Notification.error({
            message: res.message,
            duration: 5 * 1000,
          });
        } else {
          Notification.warning({
            message: res.message,
            duration: 5 * 1000,
          });
        }
        return Promise.reject('error');
      } else {
        console.log(558);
        return response.data;
      }
    }
  },
  (error) => {
    console.log(error.response);
    let err = error.response;
    if (err.status == 500) {
      Notification.error({
        message: '接口调用500！！！',
        duration: 5 * 1000,
      });
    } else {
      Notification.error({
        message: error,
        duration: 5 * 1000,
      });
    }
    return Promise.reject(error);
  }
);

export default service;
